//定义用户相关的仓库
import { defineStore } from 'pinia';
//引入获取验证码的请求方法
import {reqCode, reqUserLogin} from  '@/api/hospital';
//登录请求类型
import type {LoginData, UserLoginResponseData, UserInfo} from '@/api/hospital/type';
import type {UserState} from './interface';
import {GET_TOKEN, SET_TOKEN, REMOVE_TOKEN} from '@/utils/user';
const useUserStore = defineStore('User', {
    state: (): UserState => {
        return {
            //用于控制登录组件 Dialog 的显示与隐藏
            visiable: false,
            //存储用户的验证码
            code: '',
            //存储用户信息
            userInfo: JSON.parse(GET_TOKEN() as string) || ({} as UserInfo)
        }
    },
    actions:{
        //获取验证码的方法
        async getCode(phone:string) {
            //向服务器携带手机号码，获取验证码
            //正常开发，只需要发一个请求，后端就会将验证码推送到用户手机设备中
            //当前我们目前服务器不能向用户手机设备推送验证码（花钱）
            let result:any = await reqCode(phone);
            if(result.code == 200) {
                this.code = result.data;
                return 'ok';
            } else {
                return Promise.reject(new Error(result.message));
            }
        },
        //用户手机号码登录的方法
        async userLogin(loginData:LoginData) {
            let result:UserLoginResponseData = await reqUserLogin(loginData);
            if(result.code == 200) {
                this.userInfo = result.data;
                //本地存储持久化用户信息
                SET_TOKEN(JSON.stringify(this.userInfo));
                //返回一个成功的 Promise
                return 'ok';
            } else {
                return Promise.reject(new Error(result.message));
            }
        },
        //退出登录方法
        logout() {
            //清空仓库的数据
            this.userInfo = {name:'',token:''};
            //清空本地存储的数据
            REMOVE_TOKEN();
        },
        //查询微信扫码的结果（看本地存储是否存储用户数据）
        queryState() {
            //开启定时器，每隔一段时间问本地存储是否拥有用户信息
            //有，关闭对话框
            let timer = setInterval(() => {
                //本地存储有数据，扫码成功
                if(GET_TOKEN()) {
                     //关闭对话框
                     this.visiable = false;    
                     this.userInfo = JSON.parse(GET_TOKEN() as string);   
                     //清除定时器
                     clearInterval(timer);
                }
            }, 3000);
        }
    },
    getters:{

    }
});

export default useUserStore;